﻿using Microsoft.EntityFrameworkCore;
using NUnit.Framework;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Data.SqlClient;
namespace hoemwork
{

    public class GetMethod<T> //where T : IComparable<T>
    {
        ////用泛型改造“取数组中最大值”（提示：IComparable）
        //public T GetMax(params T[] value)
        //{
        //    T Max = value[0];

        //    int i = 0;
        //    while (i < value.Length - 1)
        //    {
        //        if (Max.CompareTo(value[i + 1]) < 0)
        //        {
        //            Max = value[i + 1];
        //        }
        //        else
        //        {

        //        }

        //        i++;
        //    }
        //    Console.WriteLine(Max);
        //    return Max;
        //}
        //public void GetPrime(int Prime)
        //{
        //    for (int i = 2; i < 100; i++)
        //    {
        //        if (IsPrime(i))
        //        {
        //            Console.WriteLine(i);
        //        }
        //        else
        //        {
        //            continue;
        //        }

        //    }

        //}
        //public bool IsPrime(int number)
        //{
        //    for (int i = 2; i < number; i++)
        //    {
        //        if (number % i == 0)
        //        {
        //            return false;
        //        }
        //        else
        //        {
        //            continue;
        //        }
        //    }
        //    return true;
        //}
        //public static int GetSubscript(T target, params T[] num)
        //{
        //    int left = 0;
        //    int right = num.Length;

        //    while ((left < right))
        //    {
        //        int middle = (left + right) / 2;
        //        if (target.CompareTo(num[middle]) > 0)
        //        {
        //            left = middle;
        //        }
        //        else if (target.CompareTo(num[middle]) < 0)
        //        {
        //            right = middle;

        //        }
        //        else
        //        {
        //            Console.WriteLine(middle);
        //            return middle;
        //        }

        //    }

        //    return -1;
        //}
        ////实现GetCount(string container, string target)方法，可以统计出container中有多少个target  
        //public static void GetCountParameter()
        //{
        //    string container = "fgfg";
        //    string target = "fg";
        //    GetCount(container, target);
        //}
        //public static bool GetCount(string container, string target)
        //{

        //    int count = 0;//数量
        //    int index = 0;//下标
        //    for (int i = 0; i < container.Length; i++)
        //    {
        //        index = container.IndexOf(target, index);
        //        if (index == -1)
        //        {
        //            return false;
        //        }
        //        else
        //        {
        //            count++;
        //            Console.WriteLine($"关键字出现总次数{count}");
        //            index = index + target.Length;
        //        }

        //    }
        //    return true;
        //}
        //public static string GetString()
        //{
        //    Random rnd = new Random();
        //    string rndparmeter = "abcde1234";
        //    StringBuilder sb = new StringBuilder();

        //    for (int i = 0; i < 4; i++)
        //    {
        //        int a = rnd.Next(0, 4);
        //        sb.Append(rndparmeter[a]);

        //    }
        //    string parmeter = sb.ToString();
        //    return parmeter;
        //}
        ////通过控制台读取用户输入，比如：3月，12周，100天，利用之前作业的GetDate()方法，输出指定时间段后的日期
        //public static string GetRead()
        //{
        //    Console.WriteLine("请用户输入日期");
        //    string read = Console.ReadLine();
        //    string count = read.Substring(0, read.Length - 1);   //截取数量之后用read找从方法里找日期
        //    return read;

        //}

        //   利用Linq to EntityFramework，实现方法：
        //GetBy(IList<ProblemStatus> exclude, bool hasSummary, bool descByPublishTime)，该方法可以根据输入参数：
        //IList<ProblemStatus> exclude：不显示（排除）某些状态的求助
        //bool hasSummary：只显示已有总结的求助（如果传入值为true的话）
        //bool descByPublishTime：按发布时间正序还是倒序
        //public static void GetBy(IList<ProblemStatus> exclude, bool hasSummary, bool descByPublishTime)
        //{
        //    IList<Problem> hadwithdrwn = null;
        //    IList<Problem> havereward = null;
        //    IList<Problem> query = null;
        //    GetExclude(exclude);
        //    GetHasSummary(hasSummary, ref hadwithdrwn, ref havereward);
        //    GetDescByPublish(descByPublishTime, ref query);
        //}
        //public static IList<Problem> GetExclude(IList<ProblemStatus> exclude)
        //{
        //    SqlDbContext context = new SqlDbContext();
        //    return context.Problems.Where(q => exclude.Contains(q.Status)).ToList();
        //}
        //public static bool GetHasSummary(bool hasSummary, ref IList<Problem> hadwithdrawn, ref IList<Problem> havereward)
        //{

        //    if (hasSummary)
        //    {
        //        SqlDbContext context = new SqlDbContext();
        //        hadwithdrawn =
        //             context.Problems.Where(q => ProblemStatus.HadWithdrawn == q.Status).ToList();
        //        havereward =
        //            context.Problems.Where(q => ProblemStatus.HaveReward == q.Status).ToList();
        //        return true;
        //    }
        //    return false;


        //}
        //public static bool GetDescByPublish(bool descByPublishTime, ref IList<Problem> query)
        //{
        //    SqlDbContext context = new SqlDbContext();
        //    if (descByPublishTime)
        //    {
        //        query =
        //            context.Problems.OrderBy(q => q.PublishDateTime).ToList();
        //        return true;
        //    }
        //    query =
        //        context.Problems.OrderByDescending(q => q.PublishDateTime).ToList();
        //    return false;
        //}
        //实现方法：GetMessage()，靠将消息列表：
        //所有未读在已读前面
        //未读和已读各自按生成时间排序



      
    }
}
